/*
 * AbstractAdmissionControl.h
 *
 *  Created on: 2011-04-10
 *      Author: Jagger
 */

#ifndef ABSTRACTADMISSIONCONTROL_H_
#define ABSTRACTADMISSIONCONTROL_H_

#include <omnetpp.h>
#include "NetPacket_m.h"

/**
 * Klasa abstrakcyjna dla typowego modulu realizujacego algorytm AC. Algorytm
 * ten zaimplementowany musi zostac w metodzie 'acceptPacket'. Jesli metoda
 * ta zwraca 'true' to dany pakiet jest przesylany dalej, w przeciwnym wypadku
 * jest odrzucany (kasowany).
 */
class AbstractAdmissionControl : public cSimpleModule
{
protected:
	/**
	 * Liczba pakietow ktora weszla do tego modulu.
	 */
	uint32_t totalIn;
	/**
	 * Liczba pakietow ktora opuscila ten modul.
	 */
	uint32_t totalOut;
	/**
	 * Czas przetworzenia ostatniego pakietu.
	 */
	simtime_t lastProcessTime;

	/**
	 * Iniciuje parametry tej klasy.
	 */
	virtual void initialize();

	/**
	 * Tworzy statystyki.
	 */
	virtual void finish();

	/**
	 * Zajmuje sie obsluga pakietow wewnetrznych jak i tych przychodzacych z
	 * innych modulow.
	 */
	virtual void handleMessage(cMessage* msg);

	/**
	 * Decyduje czy przeslac dany pakiet.
	 */
	virtual bool acceptPacket(NetPacket* packet) = 0;
};

#endif /* ABSTRACTADMISSIONCONTROL_H_ */
